﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using WordDocumentGenerator.Library;

namespace GPS.ENTITYS
{
    public class CrudModelDGV
    {
        public Int16? STT { get; set; }
        public decimal ID { get; set; }
       
        //[Required(ErrorMessage = "Mã giảng viên bắt buộc nhập")]
        [Display(Name = "Mã giảng viên")]
        public string GV_MA { get; set; }

        [Required(ErrorMessage = "Đơn vị GTVT bắt buộc nhập")]
        [Display(Name = "Đơn vị GTVT")]
        public string GV_DVGTVT_MA { get; set; }

        [Required(ErrorMessage = "Hạng đào tạo bắt buộc nhập")]
        [Display(Name = "Hạng đào tạo")]
        public string GV_HANGDT_MA { get; set; }
        public Nullable<decimal> GV_HANGDT_RANK { get; set; }

        [Required(ErrorMessage = "Họ đệm bắt buộc nhập")]
        [Display(Name = "Họ đệm")]
        public string GV_HODEM { get; set; }

        [Required(ErrorMessage = "Tên bắt buộc nhập")]
        [Display(Name = "Tên")]
        public string GV_TEN { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYSINH { get; set; }

        //[Required(ErrorMessage = "Ảnh CD bắt buộc nhập")]
        //[Display(Name = "Ảnh CD")]
        //public byte[] GV_ANHCD { get; set; }
        public string GV_SOCMT { get; set; }
        public string GV_NOICT { get; set; }
        public string GV_NOICT_DVHC_MA { get; set; }
        public string GV_NOICT_DVGTVT_MA { get; set; }
        public string GV_GIOITINH { get; set; }
        public string GV_TEL { get; set; }
        public string GV_HTTUYENDUNG { get; set; }
        public string GV_TDVANHOA { get; set; }
        public string GV_TDCHUYENMON { get; set; }
        public string GV_TDSUPHAM { get; set; }
        public string GV_HGPLX_MA { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYCAPGPLX { get; set; }
        [DisplayFormat(DataFormatString = "{0:0}", ApplyFormatInEditMode = true)]
        public Nullable<decimal> GV_THAMNIENLX { get; set; }
        public string GV_SOQD_GCN { get; set; }
        public Nullable<System.DateTime> GV_NGAYQD_GCN { get; set; }
        public string GV_HTDTAO_MA { get; set; }
        public bool GV_CAUTAOSUACHUA { get; set; }
        public bool GV_DAODUCLAIXE { get; set; }
        public bool GV_NGHIEPVUVANTAI { get; set; }
        public bool GV_LUATGTDB { get; set; }
        public bool GV_KYTHUATLAIXE { get; set; }
        public string GV_MOTA { get; set; }
        public bool GV_ACTIVE { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYNHAP { get; set; }
        public string GV_NGUOINHAP { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYSUA { get; set; }
        public string GV_NGUOISUA { get; set; }
        public byte[] GV_ANHCD { get; set; }
        public HttpPostedFileBase vGV_ANHCD { get; set; }
    }

    public class CrudModelDGV_WORD
    {
        public Int16? STT { get; set; }
        public decimal ID { get; set; }

        //[Required(ErrorMessage = "Mã giảng viên bắt buộc nhập")]
        [Display(Name = "Mã giảng viên")]
        public string GV_MA { get; set; }

        [Required(ErrorMessage = "Đơn vị GTVT bắt buộc nhập")]
        [Display(Name = "Đơn vị GTVT")]
        public string GV_DVGTVT_MA { get; set; }

        [Required(ErrorMessage = "Hạng đào tạo bắt buộc nhập")]
        [Display(Name = "Hạng đào tạo")]
        public string GV_HANGDT_MA { get; set; }
        public Nullable<decimal> GV_HANGDT_RANK { get; set; }

        [Required(ErrorMessage = "Họ đệm bắt buộc nhập")]
        [Display(Name = "Họ đệm")]
        public string GV_HODEM { get; set; }

        [Required(ErrorMessage = "Tên bắt buộc nhập")]
        [Display(Name = "Tên")]
        public string GV_TEN { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYSINH { get; set; }

        //[Required(ErrorMessage = "Ảnh CD bắt buộc nhập")]
        //[Display(Name = "Ảnh CD")]
        //public byte[] GV_ANHCD { get; set; }
        public string GV_SOCMT { get; set; }
        public string GV_NOICT { get; set; }
        public string GV_NOICT_DVHC_MA { get; set; }
        public string GV_NOICT_DVGTVT_MA { get; set; }
        public string GV_GIOITINH { get; set; }
        public string GV_TEL { get; set; }
        public string GV_HTTUYENDUNG { get; set; }
        public string GV_TDVANHOA { get; set; }
        public string GV_TDCHUYENMON { get; set; }
        public string GV_TDSUPHAM { get; set; }
        public string GV_HGPLX_MA { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYCAPGPLX { get; set; }
        [DisplayFormat(DataFormatString = "{0:0}", ApplyFormatInEditMode = true)]
        public Nullable<decimal> GV_THAMNIENLX { get; set; }
        public string GV_SOQD_GCN { get; set; }
        public Nullable<System.DateTime> GV_NGAYQD_GCN { get; set; }
        public string GV_HTDTAO_MA { get; set; }
        public string GV_CAUTAOSUACHUA { get; set; }
        public string GV_DAODUCLAIXE { get; set; }
        public string GV_NGHIEPVUVANTAI { get; set; }
        public string GV_LUATGTDB { get; set; }
        public string GV_KYTHUATLAIXE { get; set; }
        public string GV_MOTA { get; set; }
        public string GV_ACTIVE { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYNHAP { get; set; }
        public string GV_NGUOINHAP { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> GV_NGAYSUA { get; set; }
        public string GV_NGUOISUA { get; set; }
        public byte[] GV_ANHCD { get; set; }
        public HttpPostedFileBase vGV_ANHCD { get; set; }
    }

    public class EXPORTWORD_GIAOVIEN
    {
        public static byte[] EXPORT_GIAOVIEN(string templateFileName, object objSource, string docType)
        {
            DocumentGenerationInfo generationInfo = GetDocumentGenerationInfo(docType, "1.0", objSource, templateFileName, false);

            COMMON.ExportCore<CrudModelDGV_WORD> docGenerator = new COMMON.ExportCore<CrudModelDGV_WORD>(generationInfo);

            return docGenerator.GenerateDocument();
        }
        /// <summary>
        /// Gets the document generation info.
        /// </summary>
        /// <param name="docType">Type of the doc.</param>
        /// <param name="docVersion">The doc version.</param>
        /// <param name="dataContext">The data context.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="useDataBoundControls">if set to <c>true</c> [use data bound controls].</param>
        /// <returns></returns>
        private static DocumentGenerationInfo GetDocumentGenerationInfo(string docType, string docVersion, object dataContext, string fileName, bool useDataBoundControls)
        {
            DocumentGenerationInfo generationInfo = new DocumentGenerationInfo();
            generationInfo.Metadata = new DocumentMetadata
            {
                DocumentType = docType,
                DocumentVersion = docVersion
            };
            generationInfo.DataContext = dataContext;
            generationInfo.TemplateData = File.ReadAllBytes(fileName);
            generationInfo.IsDataBoundControls = useDataBoundControls;

            return generationInfo;
        }

    }
}
